﻿using System;
using System.Collections.Generic;
using System.Data;
using App_Code.Conexao;
using App_Code.Interface;
using App_Code.Vo;
using FluorineFx;
namespace App_Code.Retaguarda.BD
{
    [RemotingService]
    public class ExameBD: BdAbstrato<Exame>
    {
        public ExameBD(ConfiguradorConexao configurador): base(configurador)
        {
        }

        public override void Adicionar(Exame exame)
        {
            ComandoSql("[dbo].[ins_TBL_Endereco]", CommandType.StoredProcedure);
            MontarParametros(exame);
            ExecutarComando();
        }

        public override void Atualizar(Exame exame)
        {
            ComandoSql("[dbo].[atu_TBL_Endereco]", CommandType.StoredProcedure);
            MontarParametros(exame);
            ExecutarComando();
        }

        public override void Excluir(Exame exame)
        {
            throw new NotImplementedException();
        }

        public override Exame Consultar(Exame exame)
        {
            ComandoSql("[dbo].[cons_TBL_EnderecoPorCodigoUsuario]", CommandType.StoredProcedure);
            AdicionarParametroNulo("@ATENDIMENTO_CODIGO", exame.Atendimento.Codigo);
            return MontarObjeto();
        }

        public override List<Exame> Listar(Exame exame)
        {
            ComandoSql("[dbo].[cons_TBL_AreaAtuacaoPorModalidade]", CommandType.StoredProcedure);
            AdicionarParametro("@ATENDIMENTO_CODIGO",exame.Atendimento.Codigo );
            return MontarListagem();
        }

        protected override void PreencherObjeto(ref Exame exame, IDataReader reader)
        {
            #region Endereço Usuário

            if (reader["CODIGO"] != DBNull.Value)
            {
                exame.Codigo = (decimal)reader["CODIGO"];

                if (reader["ATENDIMENTO_CODIGO"] != DBNull.Value)
                {
                    var atendimento = new Atendimento();
                    atendimento.Codigo = (decimal)reader["ATENDIMENTO_CODIGO"];
                    exame.Atendimento = atendimento;
                }
                if (reader["NOME_EXAME"] != DBNull.Value)
                {
                    exame.Nome = reader["NOME_EXAME"].ToString();
                }
                if (reader["RESULTADO_EXAME"] != DBNull.Value)
                {
                    exame.Resultado = reader["RESULTADO_EXAME"].ToString();
                }
               
            }
            #endregion
        }

        private void MontarParametros(Exame exame)
        {
            if (exame.Codigo > 0)
            {
                AdicionarParametro("@codigo", exame.Codigo); 
            }

            AdicionarParametro("@atendimento_codigo", exame.Atendimento.Codigo);
            AdicionarParametro("@nome", exame.Nome);
            AdicionarParametro("@resultado", exame.Resultado);


        }
    }
}
